﻿using System; // 引入System命名空间，提供基础类型和异常处理
using System.Collections.Generic; // 引入泛型集合命名空间，虽然本文件未直接用到
using System.Globalization; // 引入全球化命名空间，支持区域性和文化相关操作
using System.Linq; // 引入LINQ命名空间，虽然本文件未直接用到
using System.Text; // 引入文本处理命名空间，虽然本文件未直接用到
using System.Threading.Tasks; // 引入异步任务命名空间，虽然本文件未直接用到
using System.Windows; // 引入WPF的核心命名空间，包含Visibility等类型
using System.Windows.Data; // 引入WPF数据绑定命名空间，包含IValueConverter接口
using System.Windows.Media; // 引入WPF媒体命名空间，包含颜色和画刷类型

namespace Multi_protocol_upper_computer.Converters // 定义命名空间，组织转换器类
{
    // 字符串到布尔值的转换器，用于WPF数据绑定
    public class StringToBoolConverter : IValueConverter // 实现IValueConverter接口
    {
        // Convert方法：将value与parameter进行字符串比较，相等返回true，否则返回false
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            // 如果值或参数为null，返回false
            if (value == null || parameter == null)
                return false;
            // 忽略大小写比较value和parameter，完全相等时返回true，否则返回false
            return value.ToString().Equals(parameter.ToString(), StringComparison.OrdinalIgnoreCase);
        }

        // ConvertBack方法：将布尔值转换回字符串，仅在为true时返回parameter，否则返回Binding.DoNothing
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            // 如果value是true且parameter不为null，返回parameter的字符串
            if (value is bool b && b && parameter != null)
                return parameter.ToString();
            // 否则返回Binding.DoNothing，表示不进行反向绑定
            return Binding.DoNothing;
        }
    }

    // 布尔值到颜色画刷的转换器，用于状态指示等场景
    public class BoolToColorBrushConverter : IValueConverter // 实现IValueConverter接口
    {
        // Convert方法：根据布尔值返回不同颜色的SolidColorBrush
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            // 如果value是bool类型
            if (value is bool isConnected)
            {
                // true返回绿色画刷，false返回红色画刷
                return new SolidColorBrush(isConnected ? Colors.Green : Colors.Red);
            }
            // 其他情况返回灰色画刷
            return new SolidColorBrush(Colors.Gray);
        }

        // ConvertBack方法：不支持从画刷转换回布尔值，直接抛出异常
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException(); // 抛出未实现异常
        }
    }

    // 字符串到加载状态可见性的转换器，用于显示“加载中”提示
    public class StringToLoadingVisibilityConverter : IValueConverter // 实现IValueConverter接口
    {
        // Convert方法：根据value和parameter的字符串内容决定Visibility
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            // 如果值或参数为null，返回Collapsed（不可见）
            if (value == null || parameter == null)
                return Visibility.Collapsed;

            // 将value和parameter转换为字符串
            string stringValue = value.ToString();
            string parameterValue = parameter.ToString();

            // 如果参数是"Loading"，则仅当值为"Loading"时返回Visible，否则返回Collapsed
            if (parameterValue.Equals("Loading", StringComparison.OrdinalIgnoreCase))
            {
                return stringValue.Equals("Loading", StringComparison.OrdinalIgnoreCase) ? Visibility.Visible : Visibility.Collapsed;
            }

            // 默认行为：值与参数相等时返回Visible，否则返回Collapsed
            return stringValue.Equals(parameterValue, StringComparison.OrdinalIgnoreCase) ? Visibility.Visible : Visibility.Collapsed;
        }

        // ConvertBack方法：不支持从Visibility反向转换为字符串，直接抛出异常
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException(); // 抛出未实现异常
        }
    }
}